home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr44 / 2m30src.zip / 2M-INFMC.C < prev    next >
C/C++ Source or Header  |  1995-03-06  |  3KB  |  133 lines

  1.  
  2. /*********************************************************************
  3. *                                                                    *
  4. *     2M-INFMC 1.0  -   Programa para construir el fichero *.FMC     *
  5. *                                                                    *
  6. *     Necesita como entrada el fichero *.GRA con los datos crudos    *
  7. *     de la imagen.  No se trata de código ejemplar ni eficiente;    *
  8. *     simplemente cumple con su función y punto :-)                  *
  9. *                                                                    *
  10. *     Este  programa  es  de «uso interno» y no aparece compilado    *
  11. *     con los ejecutables de la aplicación.                          *
  12. *                                                                    *
  13. *********************************************************************/
  14.  
  15.  
  16. #include <stdlib.h>
  17. #include <dos.h>
  18. #include <stdio.h>
  19. #include <string.h>
  20. #include <io.h>
  21. #include "2m-info.h"
  22.  
  23.  
  24. void Comprimir (void), GenerarFMC (void);
  25.  
  26.  
  27. void main()
  28. {
  29.    Comprimir();
  30.    GenerarFMC();
  31. }
  32.  
  33.  
  34. void Comprimir()
  35. {
  36.   FILE *fi, *fo;
  37.   char c;
  38.   long i;
  39.   int  cc, c0, cv;
  40.  
  41.   printf("\nGenerando 2m-info.p64 a partir de 2m-info.gra ...\n");
  42.  
  43.   if ((fi=fopen("2m-info.gra", "r+b"))==NULL) {
  44.     printf("\nProblemas para leer 2m-info.gra\n");
  45.     exit(1);
  46.     }
  47.   if ((fo=fopen("2m-info.p64", "w+b"))==NULL) {
  48.     printf("\nProblemas para crear 2m-info.p64\n");
  49.     exit(2);
  50.     }
  51.  
  52.   fread (&c, 1, 1, fi);
  53.   c0=c; cv=1;
  54.  
  55.   for (i=0; i<filelength(fileno(fi))-1; i++) {
  56.     fread (&c, 1, 1, fi);
  57.     cc = c;
  58.     if (cc==c0)
  59.         cv++;
  60.       else
  61.         if (cv==1)
  62.             fwrite (&c0, 1, 1, fo);
  63.           else
  64.             switch (cv) {
  65.               case 2:  c0+=64;  fwrite (&c0, 1, 1, fo); cv=1; break;
  66.               case 3:  c0+=128; fwrite (&c0, 1, 1, fo); cv=1; break;
  67.               default: c0+=192; fwrite (&c0, 1, 1, fo);
  68.                                 fwrite (&cv, 1, 1, fo); cv=1; break;
  69.               }
  70.     if (cv==255) {
  71.       c0+=192;
  72.       fwrite (&c0, 1, 1, fo);
  73.       fwrite (&cv, 1, 1, fo);
  74.       cv=1;
  75.       }
  76.  
  77.     c0=cc;
  78.     }
  79.  
  80.   fwrite (&c, 1, 1, fo);
  81.  
  82.   fclose (fi); fclose(fo);
  83. }
  84.  
  85.  
  86.  
  87. void GenerarFMC()
  88. {
  89.   FILE *f, *g;
  90.   char cad[FMC_ID_HEAD+1];
  91.   int  i, j;
  92.   long lj, lfs;
  93.   FichMultCiri info;
  94.  
  95.   printf("Generando 2m-info.fmc a partir de 2m-info.p64 ...\n");
  96.  
  97.   if ((f=fopen("2m-info.fmc", "w+b"))==NULL) {
  98.     printf("\nProblemas para crear 2m-info.fmc\n");
  99.     exit(3);
  100.     }
  101.   if ((g=fopen("2m-info.p64", "r+b"))==NULL) {
  102.     printf("\nProblemas para leer 2m-info.p64\n");
  103.     exit(4);
  104.     }
  105.  
  106.   for (i=0; i<=FMC_ID_HEAD; i++) cad[i]=0;
  107.   strcpy (cad, "\r\nFichero Multimedia CiriSOFT v1.0\r\n\CiriSOFT Multimedia File v1.0\r\n\032");
  108.   strcpy (&cad[FMC_ID_OFF], FMC_ID);
  109.   fwrite (cad, 1, FMC_ID_HEAD, f);
  110.  
  111.   lfs = filelength(fileno(g));
  112.  
  113.   memset (&info, 0, sizeof (info));
  114.  
  115.   lj = sizeof (info) + lfs;
  116.  
  117.   info.lbloque = lj;
  118.   info.tipo = FMC_GRAFICO;
  119.   strcpy (info.nombre, "Galaxia");
  120.   info.atributos = 1;
  121.   info.info.gr.lx = 160;
  122.   info.info.gr.ly = 234;
  123.  
  124.   fwrite (&info, 1, sizeof (info), f);
  125.  
  126.   for (i=0; i<lfs; i++) {
  127.     fread  (&j, 1, 1, g);
  128.     fwrite (&j, 1, 1, f);
  129.     }
  130.  
  131.   fclose(f); fclose(g);
  132. }
  133.